/**
 作者：张峰
 版本：AIR1.0
 
 功能：相对路径的文件读取和写入
 
 */
package air.data.file
{
	import flash.filesystem.File;
	import flash.filesystem.FileMode;
	import flash.filesystem.FileStream;
	import flash.system.Capabilities;
	import flash.utils.ByteArray;
	
	public class FileOperate
	{
		public static function isAIR ():Boolean
		{
			return "Desktop" == Capabilities.playerType;
		}
		/**
		 * 读取文件 
		 * @param path 文件相对于AIR安装目录的地址
		 * @return 返回文件内容，正常情况下为字符串，如果文件不存在将返回null
		 * 
		 */
		public static function read (path:String):*
		{
			if (!isAIR ())
			{
				throw new Error("System no AIR!");
			}
			var file:File=new File(File.applicationDirectory.resolvePath(path).nativePath);
			if (!file.exists)
			{
				return null;
			}
			var fs:FileStream=new FileStream;
			fs.open (file,FileMode.READ);
			var ss:String=fs.readMultiByte(fs.bytesAvailable,File.systemCharset);
			fs.close();
			return ss;
		}
		/**
		 * 写文件，如果没有该文件将创建文件 
		 * @param path 文件相对于AIR安装目录的地址
		 * @param data 数据
		 * 
		 */
		public static function write (path:String,data:String):void
		{
			if (!isAIR ())
			{
				throw new Error("System no AIR!");
			}
			var file:File=new File(File.applicationDirectory.resolvePath(path).nativePath);
			var fs:FileStream=new FileStream;
			fs.open (file,FileMode.WRITE);
			fs.writeMultiByte (data,File.systemCharset);
			//fs.writeUTFBytes(data);
			fs.close();
		}
		/**
		 * UTF格式读取文件 
		 * @param path 文件相对于AIR安装目录的地址
		 * @return 返回文件内容，正常情况下为字符串，如果文件不存在将返回null
		 * 
		 */
		public static function readUTF (path:String):*
		{
			if (!isAIR ())
			{
				throw new Error("System no AIR!");
			}
			var file:File=new File(File.applicationDirectory.resolvePath(path).nativePath);
			if (!file.exists)
			{
				return null;
			}
			var fs:FileStream=new FileStream;
			fs.open (file,FileMode.READ);
			var ss:String=fs.readUTFBytes(fs.bytesAvailable);
			fs.close();
			return ss;
		}
		/**
		 * UTF格式写文件，如果没有该文件将创建文件 
		 * @param path 文件相对于AIR安装目录的地址
		 * @param data 数据
		 * 
		 */
		public static function writeUTF (path:String,data:String):void
		{
			if (!isAIR ())
			{
				throw new Error("System no AIR!");
			}
			var file:File=new File(File.applicationDirectory.resolvePath(path).nativePath);
			var fs:FileStream=new FileStream;
			fs.open (file,FileMode.WRITE);
			fs.writeUTFBytes(data);
			fs.close();
		}
		/**
		 * 读取一个Object,注意若要强转类需注册 ，例 registerClassAlias("com.example.eg", ExampleClass);
		 * @param path 文件相对于AIR安装目录的地址
		 * @return Object
		 * 
		 */
		public static function readObject(path:String):*
		{
			if (!isAIR ())
			{
				throw new Error("System no AIR!");
			}
			var file:File=new File(File.applicationDirectory.resolvePath(path).nativePath);
			if (!file.exists)
			{
				return null;
			}
			var fs:FileStream=new FileStream;
			fs.open (file,FileMode.READ);
			var obj:*=fs.readObject();
			fs.close();
			return obj;
		}
		/**
		 * 写入一个Object 
		 * @param path 文件相对AIR安装目录的地址
		 * @param data Object
		 * 
		 */
		public static function writeObject (path:String,data:*):void
		{
			if (!isAIR ())
			{
				throw new Error("System no AIR!");
			}
			var file:File=new File(File.applicationDirectory.resolvePath(path).nativePath);
			var fs:FileStream=new FileStream;
			fs.open (file,FileMode.WRITE);
			fs.writeObject(data);
			fs.close();
		}
		
		/**
		 * 写入一个ByteArray 
		 * @param path 文件相对AIR安装目录的地址
		 * @param data ByteArray
		 * 
		 */
		public static function writeByteArray(path:String,data:ByteArray):void
		{
			if (!isAIR ())
			{
				throw new Error("System no AIR!");
			}
			var file:File=new File(File.applicationDirectory.resolvePath(path).nativePath);
			var fs:FileStream=new FileStream;
			fs.open (file,FileMode.WRITE);
			fs.writeBytes(data);
			fs.close();
		}
		/**
		 * 同步拷贝   注意，所有位置均为相对于AIR程序安装目录的位置
		 * @param source 源文件位置
		 * @param path 新位置
		 * 
		 */
		public static function copy(source:String,path:String):void
		{
			if (!isAIR ())
			{
				throw new Error("System no AIR!");
			}
			var ss:String=String(read(source));
			write(path,ss);
		}
		
		/**
		 * UTF格式同步拷贝   注意，所有位置均为相对于AIR程序安装目录的位置
		 * @param source 源文件位置
		 * @param path 新位置
		 * 
		 */
		public static function copyToUTF(source:String,path:String):void
		{
			if (!isAIR ())
			{
				throw new Error("System no AIR!");
			}
			var ss:String=String(readUTF(source));
			writeUTF(path,ss);
		}
	}
}